package rgil.actions;

import org.mentawai.core.BaseAction;
import org.mentawai.rule.EmailRule;
import org.mentawai.validation.Validatable;
import org.mentawai.validation.Validator;

import rgil.pojo.Usuario;
import rgil.repository.UsuarioRepository;

public class UsuarioAction extends BaseAction implements Validatable {

	private UsuarioRepository usuarioRepository;

	public UsuarioAction() {
	}
	
	public UsuarioAction(UsuarioRepository usuarioRepository) {
		this.usuarioRepository = usuarioRepository;
	}
	
	public String form(UsuarioRepository usuarioRepository){
		output.setObject(new Usuario());
		return MAIN;
	}
	
	public String edit(Usuario usuario){
		Usuario loaded = usuarioRepository.load(usuario);
		output.setObject(loaded);
		return MAIN;
	}
	
	public String save(Usuario usuario){
		Usuario finded = usuarioRepository.findBydUsername(usuario);
		if(finded != null && finded.getIdUsuario() != usuario.getIdUsuario()) {
			addError("username", "username_ja_existe");
			return ERROR;
		}
		
		usuarioRepository.save(usuario);
		
		return CREATED;
	}

	public String delete(Usuario usuario) {
		usuarioRepository.delete(usuario);
		return list();
	}
	
	public String list(){
		output.setValue("usuarios", usuarioRepository.listAll());
		return LIST;
	}

	public void setUsuarioRepository(UsuarioRepository usuarioRepository) {
		this.usuarioRepository = usuarioRepository;
	}

	public void prepareValidator(Validator validator, String innerAction) {
		
		if("save".equals(innerAction)){
			validator.requiredFields("required_field", "nome", "username", "password");
			validator.add("email", EmailRule.getInstance(), "invalid_email");
		}
		
	}
}
